ASP.NET Core-এ Authentication এবং Authorization হলো দুটি গুরুত্বপূর্ণ সিকিউরিটি ফিচার, যা অ্যাপ্লিকেশনের ব্যবহারকারী যাচাইকরণ এবং তাদের অ্যাক্সেস নিয়ন্ত্রণের জন্য ব্যবহৃত হয়। Authentication এর মাধ্যমে ব্যবহারকারীর পরিচয় নিশ্চিত করা হয়, এবং Authorization নির্ধারণ করে ব্যবহারকারী অ্যাপ্লিকেশনের কোন অংশে অ্যাক্সেস করতে পারবে।
Authentication এর কাজ হলো ব্যবহারকারীর পরিচয় যাচাই করা। ASP.NET Core বিভিন্ন ধরনের Authentication পদ্ধতি সমর্থন করে, যেমন:
Cookie-based Authentication হলো ASP.NET Core এর ডিফল্ট Authentication মেকানিজম। এটি ব্যবহারকারীর লগইন সেশনের তথ্য Cookie-তে সংরক্ষণ করে।
Startup.cs-এ Middleware যুক্ত করুন:
services.AddAuthentication("MyCookieAuth")
.AddCookie("MyCookieAuth", options =>
{
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/AccessDenied";
});
Middleware সক্রিয় করুন:
app.UseAuthentication();
app.UseAuthorization();
লগইন প্রক্রিয়া তৈরি করুন:
public async Task<IActionResult> Login(string username, string password)
{
if (username == "admin" && password == "password")
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Role, "Admin")
};
var identity = new ClaimsIdentity(claims, "MyCookieAuth");
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync("MyCookieAuth", principal);
return RedirectToAction("Index", "Home");
}
return View();
}
JWT হলো টোকেন-ভিত্তিক Authentication, যা সাধারণত Web API-তে ব্যবহৃত হয়। এটি নিরাপদ এবং স্ট্যাটলেস পদ্ধতিতে কাজ করে।
NuGet প্যাকেজ যুক্ত করুন:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Startup.cs-এ JWT সেটআপ করুন:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourIssuer",
ValidAudience = "yourAudience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
};
});
Middleware সক্রিয় করুন:
app.UseAuthentication();
app.UseAuthorization();
JWT টোকেন জেনারেট করুন:
public string GenerateJwtToken()
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, "username"),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "yourIssuer",
audience: "yourAudience",
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
Authorization নির্ধারণ করে যে, কোন ব্যবহারকারী অ্যাপ্লিকেশনের কোন রিসোর্স বা ফাংশনে অ্যাক্সেস করতে পারবে। ASP.NET Core-এ দুই ধরনের Authorization ব্যবহৃত হয়:
Role-based Authorization ব্যবহারকারীর নির্ধারিত রোলের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করে।
রোল অ্যাসাইন করুন:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "admin"),
new Claim(ClaimTypes.Role, "Admin")
};
Controller বা Action Method-এ [Authorize]
অ্যাট্রিবিউট ব্যবহার করুন:
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
return View();
}
Policy-based Authorization আরো ফাইন-গ্রেইন কন্ট্রোল প্রদান করে এবং কাস্টম নিয়ম তৈরি করতে ব্যবহৃত হয়।
Startup.cs-এ পলিসি কনফিগার করুন:
services.AddAuthorization(options =>
{
options.AddPolicy("MustBeAdmin", policy =>
policy.RequireRole("Admin"));
});
পলিসি অ্যাপ্লাই করুন:
[Authorize(Policy = "MustBeAdmin")]
public IActionResult AdminPage()
{
return View();
}
ASP.NET Core-এ UseAuthentication
এবং UseAuthorization
Middleware ব্যবহৃত হয়, যা Startup.cs
ফাইলে Configure
মেথডে যুক্ত করা হয়।
app.UseAuthentication();
app.UseAuthorization();
ASP.NET Core Identity হলো বিল্ট-ইন Authentication এবং Authorization ফ্রেমওয়ার্ক, যা ব্যবহারের মাধ্যমে সহজেই ব্যবহারকারী ম্যানেজমেন্ট সিস্টেম (লগইন, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট) তৈরি করা যায়।
Identity যুক্ত করুন:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
Middleware যুক্ত করুন:
app.UseAuthentication();
app.UseAuthorization();
ASP.NET Core এর Authentication এবং Authorization অ্যাপ্লিকেশনকে নিরাপদ রাখতে এবং ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি কাস্টমাইজযোগ্য এবং বিভিন্ন Authentication মেকানিজম যেমন Cookie, JWT, এবং OAuth সমর্থন করে। Role-based এবং Policy-based Authorization অ্যাপ্লিকেশনে শক্তিশালী এবং ফাইন-গ্রেইন অ্যাক্সেস নিয়ন্ত্রণ প্রদান করে।
Authentication হলো এমন একটি প্রক্রিয়া, যা নিশ্চিত করে যে একটি অ্যাপ্লিকেশনে প্রবেশকারী ব্যবহারকারী বৈধ এবং অনুমোদিত কিনা। Authentication সঠিকভাবে কাজ করার মাধ্যমে অ্যাপ্লিকেশনটি নিশ্চিত হয় যে ব্যবহারকারী কে। এটি একটি নিরাপত্তা ব্যবস্থার অন্যতম গুরুত্বপূর্ণ ধাপ।
ASP.NET Core-এ Authentication বিভিন্ন পদ্ধতি ব্যবহার করে ইমপ্লিমেন্ট করা যায়, যেমন Cookie-based Authentication, JWT (JSON Web Token) এবং OAuth।
Authentication সাধারণত তিনটি ধাপে কাজ করে:
Authentication সফল হলে সাধারণত একটি Token বা Session তৈরি হয়, যা ব্যবহারকারীকে সিস্টেমে অনুমোদিত রাখতে ব্যবহৃত হয়।
Cookie-based Authentication হলো ক্লাসিক্যাল Authentication পদ্ধতি, যেখানে ব্যবহারকারীর লগইন সফল হলে সার্ভারে একটি সেশন তৈরি হয় এবং ক্লায়েন্টের ব্রাউজারে একটি Cookie পাঠানো হয়। এই Cookie প্রতিটি অনুরোধে সার্ভারে ফেরত পাঠানো হয়, যা ব্যবহারকারীকে যাচাই করতে সাহায্য করে।
services.AddAuthentication("CookieAuth")
.AddCookie("CookieAuth", options =>
{
options.LoginPath = "/Account/Login";
options.Cookie.Name = "AuthCookie";
});
JWT (JSON Web Token) একটি টোকেন-ভিত্তিক Authentication পদ্ধতি, যেখানে সার্ভার একটি সাইন করা টোকেন জেনারেট করে এবং ক্লায়েন্টে পাঠায়। এই টোকেনটি প্রতিটি অনুরোধের সাথে সার্ভারে ফেরত পাঠানো হয় এবং যাচাই করা হয়।
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourIssuer",
ValidAudience = "yourAudience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
};
});
OAuth (Open Authorization) হলো একটি ওপেন স্ট্যান্ডার্ড প্রোটোকল, যা তৃতীয় পক্ষের অ্যাপ্লিকেশনকে ব্যবহারকারীর ডেটা অ্যাক্সেস করার অনুমতি দেয়, কিন্তু তাদের পাসওয়ার্ড শেয়ার করতে হয় না। এটি টোকেন ভিত্তিক Authentication পদ্ধতি।
ASP.NET Core-এ OAuth ইমপ্লিমেন্ট করার জন্য Microsoft.AspNetCore.Authentication.OAuth প্যাকেজ ব্যবহার করা হয়।
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddGoogle(options =>
{
options.ClientId = "yourClientId";
options.ClientSecret = "yourClientSecret";
});
পদ্ধতি | বৈশিষ্ট্য | ব্যবহারের ক্ষেত্র |
---|---|---|
Cookie-based | সার্ভারে সেশন সংরক্ষণ এবং ক্লায়েন্টে Cookie ব্যবহার করে। | ছোট ওয়েব অ্যাপ্লিকেশন। |
JWT | Stateless, ক্লায়েন্টে টোকেন সংরক্ষণ এবং প্রতিটি অনুরোধে পাঠানো হয়। | RESTful API এবং মাইক্রোসার্ভিস। |
OAuth | তৃতীয় পক্ষের পরিষেবা থেকে Access Token ব্যবহার করে। | বহিরাগত পরিষেবার মাধ্যমে ডেটা অ্যাক্সেস। |
Authentication অ্যাপ্লিকেশনের নিরাপত্তার মূল ভিত্তি এবং এটি ব্যবহারকারীর অভিজ্ঞতা উন্নত করার পাশাপাশি ডেটার সুরক্ষাও নিশ্চিত করে।
ASP.NET Core Identity একটি শক্তিশালী লাইব্রেরি যা ASP.NET Core অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীর অথেনটিকেশন এবং অথোরাইজেশন ব্যবস্থা পরিচালনা করার জন্য ব্যবহৃত হয়। এটি ব্যবহারকারীর লগইন, লগআউট, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট এবং অন্যান্য সিকিউরিটি ফিচার পরিচালনা করার জন্য অনেকগুলি বিল্ট-ইন ফিচার প্রদান করে।
এই টিউটোরিয়ালে আমরা ASP.NET Core Identity ব্যবহার করে Authentication কিভাবে ইমপ্লিমেন্ট করতে হয় তা দেখবো।
ASP.NET Core Identity হলো একটি পূর্ণাঙ্গ অথেনটিকেশন এবং অথোরাইজেশন সিস্টেম যা ব্যবহারকারীর রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড ম্যানেজমেন্ট এবং আরও অনেক ফিচার সরবরাহ করে। এটি আপনাকে টোকেন-ভিত্তিক অথেনটিকেশন, কুকি-বেসড অথেনটিকেশন, এবং Identity Provider Integration (OAuth, OpenID Connect) ইত্যাদি ফিচার ইমপ্লিমেন্ট করতে সহায়তা করে।
ASP.NET Core Identity কনফিগার করতে হলে কিছু নির্দিষ্ট পদক্ষেপ অনুসরণ করতে হয়। এখানে আমরা একটি সাধারণ অ্যাপ্লিকেশনে Identity সিস্টেম কনফিগার করবো।
প্রথমে আপনার ASP.NET Core প্রজেক্টে Identity প্যাকেজ ইনস্টল করতে হবে।
NuGet Package Manager ব্যবহার করে:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
CLI ব্যবহার করে:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Identity সিস্টেম ব্যবহার করতে হলে DbContext কনফিগার করতে হবে যাতে Identity ডেটাবেসে সংরক্ষণ করতে পারে। এটি সাধারণত ApplicationDbContext নামক একটি ক্লাস হিসেবে থাকে, যা IdentityDbContext
ক্লাস থেকে উত্তরাধিকারী।
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
এখানে ApplicationUser হচ্ছে একটি কাস্টম ইউজার ক্লাস, যেটি IdentityUser
থেকে উত্তরাধিকারী হতে পারে। আপনি যদি কাস্টম ইউজার প্রোপার্টি চান, তবে এই ক্লাসে নতুন প্রোপার্টি যোগ করতে পারেন।
public class ApplicationUser : IdentityUser
{
public string FullName { get; set; }
}
ASP.NET Core Identity কনফিগার করার জন্য Startup.cs বা Program.cs ফাইলে সেবা রেজিস্টার এবং কনফিগার করতে হবে। এটি Identity এবং DbContext-কে পরিষেবা হিসাবে রেজিস্টার করবে।
Program.cs ফাইলে কনফিগারেশন:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Startup.cs ফাইলের কনফিগারেশন:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// Identity Service রেজিস্টার করা
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication(); // Authentication Middleware যোগ করা
app.UseAuthorization(); // Authorization Middleware যোগ করা
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages(); // Identity Razor Pages
});
}
}
ASP.NET Core Identity UI কে আপনার অ্যাপ্লিকেশনে যোগ করতে চাইলে আপনাকে Razor Pages ব্যবহার করতে হবে। আপনি Identity UI প্যাকেজ ব্যবহার করতে পারেন।
Identity UI প্যাকেজ ইন্সটল করতে:
dotnet add package Microsoft.AspNetCore.Identity.UI
এটি রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড পরিবর্তন, ইমেইল ভেরিফিকেশন ইত্যাদি সম্পন্ন করার জন্য প্রয়োজনীয় Razor Pages প্রদান করে।
ASP.NET Core Identity রেজিস্ট্রেশন এবং লগইন সিস্টেমটি প্রি-বিল্ট Razor Pages এবং কন্ট্রোলার সহ আসে। আপনি যদি UI ব্যবহার না করেন এবং নিজস্ব কাস্টম UI তৈরি করতে চান, তবে আপনি IdentityManager API এর মাধ্যমে ইউজার তৈরি এবং লগইন করতে পারেন।
public class AccountController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
// Register Action
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
return View(model);
}
}
public class AccountController : Controller
{
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController(SignInManager<ApplicationUser> signInManager)
{
_signInManager = signInManager;
}
// Login Action
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
}
return View(model);
}
}
ASP.NET Core Identity ব্যবহার করে অ্যাপ্লিকেশনে শক্তিশালী অথেনটিকেশন সিস্টেম ইমপ্লিমেন্ট করা সম্ভব। Identity আপনার অ্যাপ্লিকেশনে ইউজার রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড পরিবর্তন এবং নিরাপত্তা ব্যবস্থা পরিচালনা করতে সহায়তা করে। আপনি কাস্টম UI তৈরি করতে পারেন বা Identity UI প্যাকেজ ব্যবহার করে প্রি-বিল্ট UI ফিচার পেতে পারেন। ASP.NET Core Identity এর মাধ্যমে সিকিউরিটি ফিচার ইমপ্লিমেন্ট করা সহজ এবং নিরাপদ।
ASP.NET Core-এ Authorization হলো নিরাপত্তা নিশ্চিত করার একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনে অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়তা করে। Authorization পলিসি এবং কাস্টম রোলস ব্যবহার করে আপনি নির্দিষ্ট ব্যবহারকারীদের জন্য নির্দিষ্ট অ্যাক্সেস কন্ট্রোল তৈরি করতে পারেন। এখানে আমরা Authorization পলিসি এবং কাস্টম রোলস সম্পর্কে বিস্তারিত আলোচনা করব।
Authorization পলিসি ASP.NET Core-এ একটি উচ্চতর কৌশল যা রোল, ক্লেইম বা কাস্টম শর্তাবলী অনুযায়ী ব্যবহারকারীর অ্যাক্সেস অনুমতি বা অস্বীকার করতে ব্যবহৃত হয়। পলিসি এক বা একাধিক শর্তাবলী দিয়ে গঠিত হতে পারে, এবং এটি অনুমোদন সিদ্ধান্ত নেয়ার সময় ব্যবহার হয়।
ConfigureServices মেথডে পলিসি তৈরি করা: পলিসি তৈরির জন্য প্রথমে AddAuthorization
মেথড ব্যবহার করে services
কনফিগারেশন ফাইলে পলিসি রেজিস্টার করতে হবে। এখানে আমরা একটি সাধারণ কাস্টম পলিসি তৈরি করব যা রোল ভিত্তিক।
উদাহরণ:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
options.AddPolicy("ManagerOnly", policy => policy.RequireRole("Manager"));
});
services.AddControllersWithViews();
}
এখানে, AdminOnly
পলিসিটি নিশ্চিত করবে যে শুধুমাত্র Admin রোলধারী ব্যবহারকারীরা অ্যাক্সেস করতে পারবে।
পলিসি প্রয়োগ করতে আপনি [Authorize] অ্যাট্রিবিউট ব্যবহার করবেন এবং পলিসির নাম উল্লেখ করবেন।
Controller Action-এ পলিসি প্রয়োগ করা:
[Authorize(Policy = "AdminOnly")]
public IActionResult AdminDashboard()
{
return View();
}
এখানে, AdminOnly
পলিসি শুধুমাত্র Admin রোলধারী ব্যবহারকারীদের AdminDashboard অ্যাক্সেস করতে দেবে।
আপনি IAuthorizationService ব্যবহার করে কোডের মধ্যে পলিসি চেক করতে পারেন, যাতে রUNTIME-এ পলিসি যাচাই করা যায়।
public class MyController : Controller
{
private readonly IAuthorizationService _authorizationService;
public MyController(IAuthorizationService authorizationService)
{
_authorizationService = authorizationService;
}
public async Task<IActionResult> SomeAction()
{
var result = await _authorizationService.AuthorizeAsync(User, null, "AdminOnly");
if (result.Succeeded)
{
// অ্যাক্সেস অনুমোদিত
return View();
}
else
{
// অ্যাক্সেস অস্বীকৃত
return Forbid();
}
}
}
ASP.NET Core-এ Roles ব্যবহার করা হয় ব্যবহারকারীদের বিশেষ ভূমিকা (role) নির্ধারণের জন্য, যাতে নির্দিষ্ট রোলধারী ব্যবহারকারীরা নির্দিষ্ট অ্যাক্সেস পেতে পারেন। কাস্টম রোলস তৈরি এবং ব্যবহার করার জন্য আপনাকে কিছু কনফিগারেশন করতে হবে।
ConfigureServices মেথডে Identity সিস্টেম কনফিগার করতে হবে:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
services.AddControllersWithViews();
}
RoleManager ব্যবহার করে কাস্টম রোল তৈরি করা:
public class RoleInitializer
{
public static void Initialize(IServiceProvider serviceProvider, UserManager<ApplicationUser> userManager)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "Admin", "Manager", "User" };
foreach (var roleName in roleNames)
{
var roleExist = roleManager.RoleExistsAsync(roleName).Result;
if (!roleExist)
{
var role = new IdentityRole(roleName);
var roleResult = roleManager.CreateAsync(role).Result;
}
}
}
}
এখানে, আপনি "Admin"
, "Manager"
, "User"
নামে কাস্টম রোল তৈরি করছেন।
রোল অ্যাসাইন করা: ব্যবহারকারীর জন্য রোল অ্যাসাইন করার জন্য UserManager ব্যবহার করা হয়।
public async Task<IActionResult> AssignRoleToUser(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
if (user != null)
{
var result = await _userManager.AddToRoleAsync(user, "Admin");
if (result.Succeeded)
{
return RedirectToAction("Index");
}
}
return View("Error");
}
ASP.NET Core-এ কাস্টম রোলস এবং পলিসি একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি একটি পলিসি তৈরি করতে পারেন যা Admin রোল এবং একটি নির্দিষ্ট ক্লেইম প্রয়োজন।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AdminWithSpecialClaim", policy =>
policy.RequireRole("Admin").RequireClaim("SpecialClaim", "true"));
});
}
এখানে, পলিসি Admin রোলধারী ব্যবহারকারী এবং একটি নির্দিষ্ট ক্লেইম চেক করবে। যদি ব্যবহারকারীর কাছে SpecialClaim
ক্লেইম না থাকে, তবে অ্যাক্সেস অস্বীকার করা হবে।
ASP.NET Core-এ Authorization পলিসি এবং কাস্টম রোলস ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনটিকে আরও নিরাপদ এবং নমনীয় করতে পারেন। পলিসির মাধ্যমে আপনি একটি শক্তিশালী নিরাপত্তা মডেল তৈরি করতে পারেন, যেখানে ব্যবহারকারীদের রোল, ক্লেইম বা অন্যান্য শর্তাবলী অনুসারে অ্যাক্সেস নিয়ন্ত্রণ করা হয়। কাস্টম রোলস ব্যবহার করে আপনি অ্যাপ্লিকেশনে ব্যবহারকারীদের জন্য নির্দিষ্ট ভূমিকা নির্ধারণ করতে পারেন, যা নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল ব্যবস্থাকে আরও উন্নত করে।
ক্লেইম ভিত্তিক Authorization হলো ASP.NET Core-এর একটি উন্নত নিরাপত্তা ফিচার, যা ব্যবহারকারীর পরিচয় এবং তাদের অধিকার যাচাই করতে ক্লেইম (Claims) ব্যবহার করে। ক্লেইম একটি কী-ভ্যালু জোড়া, যা ব্যবহারকারীর কিছু নির্দিষ্ট বৈশিষ্ট্য বা অনুমতি প্রকাশ করে। উদাহরণস্বরূপ, Role
, Email
, Department
বা Permission
ক্লেইম হতে পারে।
ASP.NET Core-এ ক্লেইম ভিত্তিক Authorization ব্যবহার করে নির্দিষ্ট ক্লেইমযুক্ত ব্যবহারকারীদের অ্যাক্সেস প্রদান করা হয়। এটি Policy-based Authorization এর মাধ্যমে বাস্তবায়ন করা হয়।
যখন ব্যবহারকারী সাইন ইন করে, তখন তাদের পরিচয়ের সাথে ক্লেইম যুক্ত করা হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে ClaimsIdentity ব্যবহার করা হয়েছে:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "John Doe"),
new Claim(ClaimTypes.Role, "Admin"),
new Claim("Department", "HR")
};
var identity = new ClaimsIdentity(claims, "CustomAuth");
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(principal);
এখানে, ClaimTypes.Role
এবং কাস্টম ক্লেইম Department
ব্যবহার করে একটি পরিচয় তৈরি করা হয়েছে।
ASP.NET Core-এ ক্লেইম ভিত্তিক পলিসি তৈরি করতে হলে AddAuthorization মেথডে পলিসি যোগ করতে হবে।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("HROnly", policy =>
policy.RequireClaim("Department", "HR"));
});
services.AddControllersWithViews();
}
উপরের উদাহরণে, HROnly
পলিসিটি এমন ব্যবহারকারীদের জন্য প্রযোজ্য, যাদের ক্লেইম Department
এর মান "HR"।
[Authorize(Policy = "HROnly")]
public IActionResult HRDashboard()
{
return View();
}
এখানে, শুধুমাত্র "HR" বিভাগে থাকা ব্যবহারকারীরাই HRDashboard অ্যাক্সেস করতে পারবে।
public async Task<IActionResult> CheckPolicy()
{
var result = await _authorizationService.AuthorizeAsync(User, null, "HROnly");
if (result.Succeeded)
{
return View("Success");
}
else
{
return View("AccessDenied");
}
}
ASP.NET Core-এ একাধিক ক্লেইম চেক করতে হলে, পলিসিতে একাধিক শর্ত যোগ করা যেতে পারে।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AdminAndHR", policy =>
policy.RequireClaim(ClaimTypes.Role, "Admin")
.RequireClaim("Department", "HR"));
});
}
উপরের পলিসিটি এমন ব্যবহারকারীদের অনুমতি দেয়, যারা Admin রোলধারী এবং একইসাথে HR বিভাগে কাজ করে।
ক্লেইম চেক করার জন্য একটি Custom Policy Handler তৈরি করা যেতে পারে, যা জটিল শর্তাবলী যাচাই করতে সহায়তা করে।
public class MinimumExperienceHandler : AuthorizationHandler<MinimumExperienceRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumExperienceRequirement requirement)
{
var experienceClaim = context.User.FindFirst("Experience");
if (experienceClaim != null && int.Parse(experienceClaim.Value) >= requirement.MinimumYears)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
public class MinimumExperienceRequirement : IAuthorizationRequirement
{
public int MinimumYears { get; }
public MinimumExperienceRequirement(int years)
{
MinimumYears = years;
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Experienced", policy =>
policy.Requirements.Add(new MinimumExperienceRequirement(5)));
});
services.AddSingleton<IAuthorizationHandler, MinimumExperienceHandler>();
}
ক্লেইম ভিত্তিক Authorization ASP.NET Core-এর একটি শক্তিশালী ফিচার, যা ব্যবহারকারীর নির্দিষ্ট বৈশিষ্ট্যের ভিত্তিতে অ্যাক্সেস নিয়ন্ত্রণ করে। এর মাধ্যমে:
ক্লেইম ভিত্তিক Authorization ব্যবহার করে আপনি নিরাপত্তা নিশ্চিত করার পাশাপাশি অ্যাপ্লিকেশনে নমনীয় অ্যাক্সেস কন্ট্রোল মডেল তৈরি করতে পারেন।
common.read_more